package com.cskaoyan.javase.oop1._11static._0introduction._0old;

/**
 * 引例：
 * 创建一个学生类，用来描述我们班全体同学，要求：
 * 		属性：姓名，性别，年龄，学号，学校信息
 * 		行为：吃饭，学习
 * 显然，我们会发现以下问题：
 * 无论创建多少Student对象，由于该类描述的是我们班全体同学，他们的班级信息实际上是一样的
 * 创建多次对象，需要重复的给一个属性赋相同的值，这是很麻烦的，不方便的。
 *
 * 学校信息这个属性实质上应该是被全体同学所共有的属性，而不是独属于某个对象的。
 * 所以，按照我们以往定义成员变量的方法来定义"学校信息"这个属性，是不合适的！
 *
 * 既然不合适，那么就需要改进，考虑以下改进方式：
 * 可以把成员变量"学校信息"，直接显式赋值为"王道训练营"或者直接写死构造方法赋值。
 * 这样确实可以实现功能，我们无需在每次创建对象时，再频繁给"学校信息"这个属性赋值了。
 * 但是没有从根本上解决问题，上述问题3依然存在：
 *      1.学校信息这个属性在每一个对象当中都存在，有点浪费内存空间,没有必要.
 *      2.我们在设计类的时候其实已经知道这个属性，是全体对象都有，不应该属于某个对象。
 *          我们希望这个属性不是属于某一个对象的，而是一种类的特征，是属于类的，属于全体对象所共享的。
 *
 * 以上,总之,这个"学校信息"的属性,就不应该是成员变量.而应该考虑定义一种"全新的，属于类的"变量
 * 实际上在Java当中,用static关键字修饰的成员变量,称之为静态成员变量,静态成员变量,不属于对象,而属于类,
 *      属于该类全体对象所共享的一个属性.
 *
 * @since 09:27
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        WangDaoStudent s1 = new WangDaoStudent("张三", "男", 18, 1, "Java40th");
        WangDaoStudent s2 = new WangDaoStudent("李四", "女", 28, 3, "Java40th");
    }
}

class WangDaoStudent {
    // 属性
    String name;
    // 性别
    /*
        性别建议使用String类型的变量去表示
        尤其不建议使用布尔类型的isMale或者isFemale
     */
    String gender;
    int age;
    int id;
    String schoolInfo = "Java40th";

    // 行为
    public void eat(){
        System.out.println("吃饭！");
    }
    public void study(){
        System.out.println("学习！");
    }

    public WangDaoStudent() {
    }

    public WangDaoStudent(String name, String gender, int age, int id, String schoolInfo) {
        this.name = name;
        this.gender = gender;
        this.age = age;
        this.id = id;
        this.schoolInfo = "Java40th";
    }
}